package com.car.rental.user.service;

import com.car.rental.common.core.response.ResponseResult;
import com.car.rental.user.model.request.UpdateUserRequest;
import com.car.rental.user.model.response.UserInfoResponse;
import com.car.rental.common.core.response.PageResult;
import com.car.rental.user.model.request.UserSearchRequest;
import com.car.rental.user.model.request.UpdatePasswordRequest;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface UserService {
    
    /**
     * 获取用户信息
     */
    ResponseResult<UserInfoResponse> getUserInfo(Long userId);
    
    /**
     * 更新用户基本信息
     */
    ResponseResult<Void> updateUserInfo(Long userId, UpdateUserRequest request);
    
    /**
     * 更新用户头像
     */
    ResponseResult<String> updateAvatar(Long userId, MultipartFile file);
    
    /**
     * 更新用户手机号
     */
    ResponseResult<Void> updatePhone(Long userId, String phone);
    
    /**
     * 更新用户邮箱
     */
    ResponseResult<Void> updateEmail(Long userId, String email);
    
    /**
     * 更新用户昵称
     */
    ResponseResult<Void> updateNickname(Long userId, String nickname);
    
    /**
     * 更新用户状态
     */
    ResponseResult<Void> updateStatus(Long userId, Integer status);

    /**
     * 搜索用户
     */
    ResponseResult<PageResult<UserInfoResponse>> searchUsers(UserSearchRequest request);

    /**
     * 修改密码
     */
    ResponseResult<Void> updatePassword(Long userId, UpdatePasswordRequest request);

    /**
     * 注销用户
     */
    ResponseResult<Void> deleteUser(Long userId);

    /**
     * 获取当前登录用户信息
     */
    ResponseResult<UserInfoResponse> getCurrentUserInfo(String token);

    /**
     * 验证用户权限
     */
    boolean validatePermission(String token, Long userId);

    /**
     * 检查用户是否具有管理员权限
     */
    boolean checkAdminRole(Long userId);

    /**
     * 检查用户是否具有超级管理员权限
     */
    boolean checkSuperAdminRole(Long userId);

    /**
     * 分配用户角色
     */
    ResponseResult<Void> assignRole(Long userId, Long roleId);

    /**
     * 更新用户角色
     */
    ResponseResult<Void> updateUserRole(Long userId, Long roleId);

    /**
     * 获取所有用户列表
     */
    ResponseResult<List<UserInfoResponse>> getAllUsers();
} 